假設原本專案資料夾是 C:\Web\SomeProject\httpdocs,後台是 C:\Web\SomeProject\httpdocs\admin 。原本後台是廠商寫的、前人寫的、路邊撿來的,太難用,又不能說不要就不要。因此想另外用laravel做一個後台來用。或者是由於租用主機的限制等等,需要把 laravel 安裝在子資料夾。假設我的後台想取名為 newadmin, 網址像這樣 http://someproject.test/newadmin/
大概有三種方法。
方法一
假設 laravel 資料夾就命名為 laravel,放到跟網頁根目錄 DocumentRoot 平級。例如 C:\Web\SomeProject\laravel
把 laravel 裡面的 public 重新命名,改叫 newadmin , 移到既有的網頁根目錄裡面。例如 C:\Web\SomeProject\httpdocs\newadmin
修改 laravel 裡面 public 的 index.php, 把路徑改對。
原本
if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
require $maintenance;
}
...
require __DIR__.'/../vendor/autoload.php';
...
$app = require_once __DIR__.'/../bootstrap/app.php';
改成
if (file_exists($maintenance = __DIR__.'/../../laravel/storage/framework/maintenance.php')) {
require $maintenance;
}
...
require __DIR__.'/../../laravel/vendor/autoload.php';
...
$app = require_once __DIR__.'/../../laravel/bootstrap/app.php';
資料夾結構
/* 原本的 DocumentRoot */
C:\Web\SomeProject\httpdocs\
admin\...
newadmin\... (相當於新的 laravel 的 public)
.htaccess
.index
/* laravel 除了 public 以外的全部 */
C:\Web\SomeProject\laravel
app
bootstrap
config
database
public (用不到了)
....
可能的問題:在 laravel 資料夾做 git 的時候會遺漏原本網頁資料夾裡面的 newadmin。在原本的網頁資料做 git 的時候又僅僅包含 laravel 的 newadmin。
方法二:全部放子資料夾
如果全部都要放到子資料夾也可以。本來 public 是在 laravel 專案根目錄的資料夾之一,現在反過來,把public當成對外開放的資料夾,然後其餘專案目錄跟檔案放到public裡面。
跟方法一差不多,重點是修改 public/index.php 裡面的路徑
C:\Web\SomeProject\httpdocs\newadmin\
laravel\
app\
bootstrap\
config\
database\
vendor\
...
.htaccess
index.php
可能的問題:
方法三
維持laravel架構不變。但是原本網站使用目錄連結的方式連到 laravel 的 public。這樣 laravel 本身不用做額外調整。原原本本的 laravel 開發方式。看來可行。
資料夾如下
/* 原本的專案資料夾 */
C:\Web\SomeProject\httpdocs
/* 下面是目錄連結,不是實體資料夾 */
C:\Web\SomeProject\httpdocs\newadmin
// 可以在httpdocs下面執行 mklink /D newadmin C:\Web\SomeProject\laravel\public
/* laravel本尊 */
C:\Web\SomeProject\laravel
app\
bootstrap\
config\
database\
public\
.htaccess
index.php